<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>this指向</title>
  </head>
  <body>
    <script>
      /*
        普通函数的this指向看函数调用方式

        普通函数
          1. 直接调用 fn()  -> window  严格模式下 -> undefined
          2. 对象调用方法 obj.fn() -> 调用方法的对象 obj
          3. 通过call/apply方法调用函数 fn.call(obj) -> 方法的第一个参数 obj
          4. 通过new调用函数 new fn() -> 产生的实例对象

        特殊函数
          1. 箭头函数：指向外层函数的this
          2. 回调函数(1. 你定义的函数 2. 你没有调用 3. 最终函数执行了)
            - DOM事件回调函数（普通函数）：指向绑定事件的DOM元素
            - 定时器回调函数（普通函数）：window 
            - 生命周期函数（普通函数）：组件实例对象
      */

      function fn1() {
        const fn2 = () => {
          console.log(this);
        };
        fn2.call({});
      }
      fn1();
    </script>
  </body>
</html>
